我試圖編寫一個函數,它可以在stringr
包的幫助下找到名稱中的模式。 我的功能看起來像以下:我無法理解的錯誤。 「Promise已經在評估中......」
namezz=function(thepatternx,data=data,column=Name){
library(stringr)
thepattern=as.character(quote(thepatternx))
pattern <- thepattern
strings <- data$column ##data$column is a character vector
found=str_detect(strings, pattern)
yez= rownames(data[which(found==TRUE),])
hhh=as.numeric(yez)+1
return(hhh)
}
當我調用該函數,我得到一個錯誤:
namezz(Primus)
Error in namezz(Primus) :
promise already under evaluation: recursive default argument reference or earlier problems?
無法理解的錯誤,什麼我做錯了..在此先感謝任何指引:)
EDIT
:如果我寫的,而不是像這樣:
namezz=function(thepatternx,data,Name){
library(stringr)
thepattern=as.character(quote(thepatternx))
pattern <- thepattern
strings <- data$Name #####data$column is a character vector
found=str_detect(strings, pattern)
yez= rownames(data[which(found==TRUE),])
hhh=as.numeric(yez)+1
return(hhh)
}
我得到:
namezz(Primus,data,Name)
numeric(0)
這是不正確的,因爲如果我做的程序,而不把它在一個函數,我得到了行:
pattern="Primus"
strings <- data$Name
mja=str_detect(strings, pattern)
yez= rownames(data[which(mja==TRUE),])
hhh=as.numeric(yez)+1
[1] 2 3 4 5 6 7 8 9
這裏是一個dput:
dput(head(data))
structure(list(Year = 1901:1906, Name = c(">>Primus<< sbk", ">>Primus<< sbk",
">>Primus<< sbk", ">>Primus<< sbk", ">>Primus<< sbk", ">>Primus<< sbk"
), Established = c(1899L, 1899L, 1899L, 1899L, 1899L, 1899L),
Bolagskod = c(2L, 2L, 2L, 2L, 2L, 2L), Kategori = c(2L, 0L,
0L, 0L, 0L, 0L), BranschTillhörighet = c(2L, 2L, 2L, 2L,
2L, 2L), Startår = c(1901L, 1901L, 1901L, 1901L, 1901L, 1901L
), Stoppår = c(1908L, 1908L, 1908L, 1908L, 1908L, 1908L),
Ranges = c("8 1901 - 1908 >>Primus<< sbk", "8 1901 - 1908 >>Primus<< sbk",
"8 1901 - 1908 >>Primus<< sbk", "8 1901 - 1908 >>Primus<< sbk",
"8 1901 - 1908 >>Primus<< sbk", "8 1901 - 1908 >>Primus<< sbk"
), Years.present = c("1901 1902 1903 1904 1905 1906 1907 1908",
"1901 1902 1903 1904 1905 1906 1907 1908", "1901 1902 1903 1904 1905 1906 1907 1908",
"1901 1902 1903 1904 1905 1906 1907 1908", "1901 1902 1903 1904 1905 1906 1907 1908",
"1901 1902 1903 1904 1905 1906 1907 1908"), Delägare.män. = c(267L,
271L, 317L, 339L, 339L, 345L), Delägare.kvinnor. = c(246L,
251L, 236L, 244L, 260L, NA), Sjukdomsfall.män. = c(66L, 61L,
100L, 103L, 106L, 82L), Sjukdomsfall.kvinnor. = c(59L, 55L,
60L, 71L, 85L, 60L), Sjukdagar.män. = c(1686L, 1918L, 2149L,
2212L, 2331L, 1890L), Sjukdagar.kvinnor. = c(1681L, 1197L,
1589L, 1904L, 2282L, 1750L), Inkomster.InträdesAvgifter. = c(303L,
NA, NA, NA, NA, NA), Inkomster.RegelbundnaAvgifter. = c(4901L,
4939L, 5172L, 5687L, 5728L, 5879L), Inkomster.UtdebiteradeAvgifter. = c(1313L,
1045L, 1141L, 2024L, 1462L, 1934L), Inkomster.Böter. = c(241L,
NA, NA, NA, NA, NA), SummaMedl.avg. = c(6758L, 5984L, 6313L,
7711L, 7190L, 7813L), Inkomster.BidragStatKommun. = c(366L,
440L, 456L, 464L, 476L, 493L), Inkomster.Räntor. = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), Inkomster.Övrigt. = c(24L, 722L, 874L, 605L, 805L, 647L
), Inkomster.Summa. = c(7148L, 7146L, 7644L, 8781L, 8472L,
8954L), DiffIntäkter.SummaMotVerkligSumma. = c(0L, 0L, -1L,
-1L, -1L, -1L), Utgifter.Sjukhjälp. = c(4735L, 4450L, 5300L,
5870L, 6560L, 5200L), Utgifter.Begravningshjälp. = c(1200L,
795L, 1045L, 1810L, 955L, 1675L), Utgifter.Arvoden. = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), Utgifter.Förvaltning. = c(956L, 972L, 1038L, 1156L, 1523L,
1171L), Utgifter.Övrigt. = c(25L, NA, 20L, 5L, NA, NA), Utgifter.Behållning. = c(231,
929, 240, -59, -565, 908), Utgifter.SummaÖvrigt.Behållning. = c(256L,
929L, 260L, -54L, -565L, 908L), Utgifter.Summa. = c(7148L,
6217L, 7403L, 8841L, 9038L, 8046L), KOLL = c(-1L, 0L, 0L,
0L, 0L, 0L), Tillgångar.KontantIKassa. = c(835L, 1765L, 2006L,
1946L, 1380L, 2259L), Tillgångar.KontantMedelBank. = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), Tillgångar.Totalt. = c(836L, 1765L, 2006L, 1946L, 1468L,
2348L), Skulder.Totalt. = c(NA_integer_, NA_integer_, NA_integer_,
NA_integer_, NA_integer_, NA_integer_), TillgångarÖverSkulder = c(NA_integer_,
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
)), .Names = c("Year", "Name", "Established", "Bolagskod",
"Kategori", "BranschTillhörighet", "Startår", "Stoppår", "Ranges",
"Years.present", "Delägare.män.", "Delägare.kvinnor.", "Sjukdomsfall.män.",
"Sjukdomsfall.kvinnor.", "Sjukdagar.män.", "Sjukdagar.kvinnor.",
"Inkomster.InträdesAvgifter.", "Inkomster.RegelbundnaAvgifter.",
"Inkomster.UtdebiteradeAvgifter.", "Inkomster.Böter.", "SummaMedl.avg.",
"Inkomster.BidragStatKommun.", "Inkomster.Räntor.", "Inkomster.Övrigt.",
"Inkomster.Summa.", "DiffIntäkter.SummaMotVerkligSumma.", "Utgifter.Sjukhjälp.",
"Utgifter.Begravningshjälp.", "Utgifter.Arvoden.", "Utgifter.Förvaltning.",
"Utgifter.Övrigt.", "Utgifter.Behållning.", "Utgifter.SummaÖvrigt.Behållning.",
"Utgifter.Summa.", "KOLL", "Tillgångar.KontantIKassa.", "Tillgångar.KontantMedelBank.",
"Tillgångar.Totalt.", "Skulder.Totalt.", "TillgångarÖverSkulder"
), row.names = c(NA, 6L), class = "data.frame")
Edit
此作品:
namezz=function(thepatternx,data,Name){
library(stringr)
thepattern=thepatternx
pattern <- thepattern
strings <- data$Name
mja=str_detect(strings, pattern)
yez= rownames(data[which(mja==TRUE),])
hhh=as.numeric(yez)+1
return(hhh)
}
namezz("Primus",data,Name)
[1] 2 3 4 5 6 7 8 9
但是,我怎樣才能通過Primus沒有引號,namezz(Primus,data,Name)
?考慮一些在我的問題,但as.character(quote())
不起作用..
Ok..Dont得到它:/ – user1665355 2013-02-20 14:32:29
@Andrie見我的編輯:) – user1665355 2013-02-20 14:37:07
沒有人有線索?: ) – user1665355 2013-02-20 14:54:20